﻿using System.Collections.Generic;
using System.Linq;

namespace Busconeitor.Domain.Entities
{
    /// <summary>
    /// Representa una palabra dentro del Vocabulario.
    /// </summary>
    public class TerminoEntity : BaseEntity
    {
        #region Atributos

        private string _palabra;
        private int _cantidadDeDocumentosDondeAparece;
        private float _frecuenciaMaxima;
        private List<PosteoEntity> _posteos;

        #endregion

        #region Constructores

        public TerminoEntity(string palabra)
        {
            _palabra = palabra;
            // Se setean en 1, por que al crearse el termino tiene que haber aparecido la palabra en un documento una vez por lo menos
            _cantidadDeDocumentosDondeAparece = 1;
            _frecuenciaMaxima = 1;
            _posteos = new List<PosteoEntity>();
        }

        #endregion

        #region Propiedades

        public string Palabra
        {
            get { return _palabra; }
        }

        public int CantidadDeDocumentosDondeAparece
        {
            get { return _cantidadDeDocumentosDondeAparece; }
        }

        public float FrecuenciaMaxima
        {
            get { return _frecuenciaMaxima; }
        }

        public List<PosteoEntity> Posteos
        {
            get { return _posteos; }
        }

        #endregion

        #region Metodos

        public void ActualizarContadores()
        {
            _frecuenciaMaxima = Posteos.Max(x => x.Frecuencia);
            _cantidadDeDocumentosDondeAparece++;
        }

        #endregion
    }
}
